package model.strategies;

import model.cubos.CuboMagico;
import model.cubos.CuboMagicoImpl;
import model.strategies.metododacruz.AlgoritmoBasico;
import model.strategies.metododacruz.AlgoritmoBasicoEtapaCinco;
import model.strategies.metododacruz.AlgoritmoBasicoEtapaDois;
import model.strategies.metododacruz.AlgoritmoBasicoEtapaQuatro;
import model.strategies.metododacruz.AlgoritmoBasicoEtapaSeis;
import model.strategies.metododacruz.AlgoritmoBasicoEtapaSete;
import model.strategies.metododacruz.AlgoritmoBasicoEtapaTres;
import model.strategies.metododacruz.AlgoritmoBasicoEtapaUm;

public class EstrategiaDaCruz implements MyStrategies
{
    private AlgoritmoBasico algoritmo;

    @Override
    public void resolver(CuboMagico cubo) throws MyStrategiesException
    {
	CuboMagicoImpl cuboMagicoImpl = (CuboMagicoImpl) cubo;

	resolverEtapaUm(cuboMagicoImpl);

	System.out.println("Etapa 1 Completa");

	resolverEtapaDois(cuboMagicoImpl);

	System.out.println("Etapa 2 Completa");

	resolverEtapaTres(cuboMagicoImpl);

	System.out.println("Etapa 3 Completa");

	resolverEtapaQuatro(cuboMagicoImpl);

	System.out.println("Etapa 4 Completa");

	resolverEtapaCinco(cuboMagicoImpl);

	System.out.println("Etapa 5 Completa");

	resolverEtapaSeis(cuboMagicoImpl);

	System.out.println("Etapa 6 Completa");

	resolverEtapaSete(cuboMagicoImpl);

	System.out.println("Etapa 7 Completa");
    }

    private void resolverEtapaSete(CuboMagicoImpl cubo) throws MyStrategiesException
    {
	algoritmo = new AlgoritmoBasicoEtapaSete();
	algoritmo.resolver(cubo);
    }

    private void resolverEtapaSeis(CuboMagicoImpl cubo) throws MyStrategiesException
    {
	algoritmo = new AlgoritmoBasicoEtapaSeis();
	algoritmo.resolver(cubo);
    }

    private void resolverEtapaCinco(CuboMagicoImpl cubo) throws MyStrategiesException
    {
	algoritmo = new AlgoritmoBasicoEtapaCinco();
	algoritmo.resolver(cubo);
    }

    private void resolverEtapaQuatro(CuboMagicoImpl cubo) throws MyStrategiesException
    {
	algoritmo = new AlgoritmoBasicoEtapaQuatro();
	algoritmo.resolver(cubo);
    }

    private void resolverEtapaTres(CuboMagicoImpl cubo) throws MyStrategiesException
    {
	algoritmo = new AlgoritmoBasicoEtapaTres();
	algoritmo.resolver(cubo);
    }

    private void resolverEtapaDois(CuboMagicoImpl cubo) throws MyStrategiesException
    {
	algoritmo = new AlgoritmoBasicoEtapaDois();
	algoritmo.resolver(cubo);
    }

    private void resolverEtapaUm(CuboMagicoImpl cubo) throws MyStrategiesException
    {
	algoritmo = new AlgoritmoBasicoEtapaUm();
	algoritmo.resolver(cubo);
    }

}
